/**
 * FormProduto.java
 * Copyright (C) 2009 Jose Mauro da Silva Sandy
 *
 * This program is free software; you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation; either version 2 of the License, or
 * (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with this program; if not, write to the Free Software
 *  Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 */

/*
 * FormProduto.java
 *
 * Created on 09/05/2009, 12:58:17
 */

package frames;

import java.io.IOException;
import java.text.DecimalFormat;
import java.util.ArrayList;
import javax.swing.JButton;
import javax.swing.JOptionPane;
import negocio.produto.*;
import utils.*;

/**
 *
 * @author jmsandy
 */
public class FormProduto extends javax.swing.JDialog {

    //<editor-fold defaultstate="collapsed" desc="FIELDS">
    private Produto produto  = null;
    private Grupo grupo      = null;
    private ArrayList lstObj = null;
    private int posicao      = 0;
    private int situacao     = 0;
    //</editor-fold>

    //<editor-fold defaultstate="collapsed" desc="Constants">
    private static final int K_FIELDS_BUSCA   = 1;
    private static final int K_FIELDS_NOVO    = 2;
    private static final int K_FIELDS_SALVAR  = 3;
    public static final int K_FORM_PESQUISA   = 4;
    public static final int K_FORM_CADASTRO   = 5;
    //</editor-fold>

    //<editor-fold defaultstate="collapsed" desc="Acessores">
    public Produto getProduto(){
        return this.produto;
    }
    //</editor-fold>

    //<editor-fold defaultstate="collapsed" desc="CONSTRUCTOR">
    /** Creates new form FormProduto */
    public FormProduto() {
        initComponents();
        initializeMyComponents();
    }
    public FormProduto(Integer tipo){
        initComponents();
        initializeMyComponents();
        this.situacao = tipo;
    }
    //</editor-fold>

    /**
    * @param args the command line arguments
    */
    public static void main(String args[]) {
        java.awt.EventQueue.invokeLater(new Runnable() {
            public void run() {
                new FormProduto().setVisible(true);
            }
        });
    }

    /** This method is called from within the constructor to
     * initialize the form.
     * WARNING: Do NOT modify this code. The content of this method is
     * always regenerated by the Form Editor.
     */
    @SuppressWarnings("unchecked")
    // <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
    private void initComponents() {

        painelPrinc = new javax.swing.JTabbedPane();
        tabDescricao = new javax.swing.JPanel();
        lbDescricao = new javax.swing.JLabel();
        textDescricao = new javax.swing.JTextField();
        lbGrupo = new javax.swing.JLabel();
        textGrupo = new javax.swing.JTextField();
        btnGrupo = new javax.swing.JButton();
        lbCodigo = new javax.swing.JLabel();
        textCodigo = new javax.swing.JTextField();
        tabComplementar = new javax.swing.JPanel();
        separador = new javax.swing.JSeparator();
        lbUnidade1 = new javax.swing.JLabel();
        lbUnidade2 = new javax.swing.JLabel();
        lbFatorConversao = new javax.swing.JLabel();
        textFatorConversao = new javax.swing.JTextField();
        lbUnidade3 = new javax.swing.JLabel();
        textMenorPreco = new javax.swing.JTextField();
        textUnidade1 = new javax.swing.JFormattedTextField();
        textUnidade2 = new javax.swing.JFormattedTextField();
        panelBotao = new javax.swing.JPanel();
        btnBuscar = new javax.swing.JButton();
        btnNovo = new javax.swing.JButton();
        btnCancel = new javax.swing.JButton();
        btnExcluir = new javax.swing.JButton();
        jPanelNavegacao = new javax.swing.JPanel();
        btnFirst = new javax.swing.JButton();
        btnPrevious = new javax.swing.JButton();
        btnNext = new javax.swing.JButton();
        btnLast = new javax.swing.JButton();

        setTitle("Produto");
        setName("formProduto"); // NOI18N
        setResizable(false);
        addWindowListener(new java.awt.event.WindowAdapter() {
            public void windowClosed(java.awt.event.WindowEvent evt) {
                formWindowClosed(evt);
            }
        });

        painelPrinc.setFont(new java.awt.Font("SansSerif", 0, 12));

        tabDescricao.setFont(new java.awt.Font("SansSerif", 0, 12));

        lbDescricao.setFont(new java.awt.Font("SansSerif", 0, 12));
        lbDescricao.setText("*Descricao");

        textDescricao.setBackground(java.awt.Color.white);
        textDescricao.setEditable(false);
        textDescricao.setFont(new java.awt.Font("SansSerif", 0, 12));
        textDescricao.setPreferredSize(new java.awt.Dimension(10, 26));

        lbGrupo.setFont(new java.awt.Font("SansSerif", 0, 12));
        lbGrupo.setText("*Grupo");

        textGrupo.setBackground(java.awt.Color.white);
        textGrupo.setEditable(false);
        textGrupo.setFont(new java.awt.Font("SansSerif", 0, 12));
        textGrupo.setDisabledTextColor(java.awt.Color.white);
        textGrupo.setPreferredSize(new java.awt.Dimension(10, 26));

        btnGrupo.setFont(new java.awt.Font("SansSerif", 0, 12));
        btnGrupo.setIcon(new javax.swing.ImageIcon(getClass().getResource("/images/open.png"))); // NOI18N
        btnGrupo.setContentAreaFilled(false);
        btnGrupo.setEnabled(false);
        btnGrupo.addMouseListener(new java.awt.event.MouseAdapter() {
            public void mouseClicked(java.awt.event.MouseEvent evt) {
                btnGrupoMouseClicked(evt);
            }
        });

        lbCodigo.setFont(new java.awt.Font("SansSerif", 0, 12));
        lbCodigo.setText("*Código");

        textCodigo.setBackground(java.awt.Color.white);
        textCodigo.setEditable(false);
        textCodigo.setFont(new java.awt.Font("SansSerif", 0, 12));
        textCodigo.setDisabledTextColor(java.awt.Color.white);
        textCodigo.setPreferredSize(new java.awt.Dimension(10, 26));

        javax.swing.GroupLayout tabDescricaoLayout = new javax.swing.GroupLayout(tabDescricao);
        tabDescricao.setLayout(tabDescricaoLayout);
        tabDescricaoLayout.setHorizontalGroup(
            tabDescricaoLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(tabDescricaoLayout.createSequentialGroup()
                .addContainerGap()
                .addGroup(tabDescricaoLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addComponent(lbDescricao)
                    .addComponent(lbGrupo)
                    .addComponent(lbCodigo))
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addGroup(tabDescricaoLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addGroup(tabDescricaoLayout.createSequentialGroup()
                        .addComponent(textGrupo, javax.swing.GroupLayout.PREFERRED_SIZE, 284, javax.swing.GroupLayout.PREFERRED_SIZE)
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                        .addComponent(btnGrupo))
                    .addComponent(textCodigo, javax.swing.GroupLayout.PREFERRED_SIZE, 78, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(textDescricao, javax.swing.GroupLayout.PREFERRED_SIZE, 433, javax.swing.GroupLayout.PREFERRED_SIZE))
                .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
        );
        tabDescricaoLayout.setVerticalGroup(
            tabDescricaoLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, tabDescricaoLayout.createSequentialGroup()
                .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                .addGroup(tabDescricaoLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(lbCodigo, javax.swing.GroupLayout.PREFERRED_SIZE, 27, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(textCodigo, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addGroup(tabDescricaoLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(lbDescricao, javax.swing.GroupLayout.PREFERRED_SIZE, 27, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(textDescricao, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addGroup(tabDescricaoLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addGroup(tabDescricaoLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                        .addComponent(lbGrupo, javax.swing.GroupLayout.PREFERRED_SIZE, 27, javax.swing.GroupLayout.PREFERRED_SIZE)
                        .addComponent(textGrupo, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
                    .addComponent(btnGrupo, javax.swing.GroupLayout.PREFERRED_SIZE, 23, javax.swing.GroupLayout.PREFERRED_SIZE))
                .addGap(18, 18, 18))
        );

        lbDescricao.getAccessibleContext().setAccessibleName("lbDescricao");

        painelPrinc.addTab("Descrição", tabDescricao);

        tabComplementar.setFont(new java.awt.Font("SansSerif", 0, 12));

        separador.setOrientation(javax.swing.SwingConstants.VERTICAL);
        separador.setBorder(null);
        separador.setPreferredSize(new java.awt.Dimension(10, 100));

        lbUnidade1.setFont(new java.awt.Font("SansSerif", 0, 12));
        lbUnidade1.setText("*Unidade 1");

        lbUnidade2.setFont(new java.awt.Font("SansSerif", 0, 12));
        lbUnidade2.setText("*Unidade 2");

        lbFatorConversao.setFont(new java.awt.Font("SansSerif", 0, 12));
        lbFatorConversao.setText("*Fator Conversão");

        textFatorConversao.setBackground(java.awt.Color.white);
        textFatorConversao.setEditable(false);
        textFatorConversao.setFont(new java.awt.Font("SansSerif", 0, 12));
        textFatorConversao.setPreferredSize(new java.awt.Dimension(10, 26));

        lbUnidade3.setFont(new java.awt.Font("SansSerif", 0, 12));
        lbUnidade3.setText("Menor Preço Apurado");

        textMenorPreco.setBackground(java.awt.Color.white);
        textMenorPreco.setEditable(false);
        textMenorPreco.setFont(new java.awt.Font("SansSerif", 0, 12));
        textMenorPreco.setPreferredSize(new java.awt.Dimension(10, 26));

        textUnidade1.setBackground(java.awt.Color.white);
        textUnidade1.setEditable(false);
        try {
            textUnidade1.setFormatterFactory(new javax.swing.text.DefaultFormatterFactory(new javax.swing.text.MaskFormatter("***")));
        } catch (java.text.ParseException ex) {
            ex.printStackTrace();
        }
        textUnidade1.setHorizontalAlignment(javax.swing.JTextField.LEFT);
        textUnidade1.setFocusLostBehavior(javax.swing.JFormattedTextField.COMMIT);
        textUnidade1.setFont(new java.awt.Font("SansSerif", 0, 12));

        textUnidade2.setBackground(java.awt.Color.white);
        textUnidade2.setEditable(false);
        try {
            textUnidade2.setFormatterFactory(new javax.swing.text.DefaultFormatterFactory(new javax.swing.text.MaskFormatter("***")));
        } catch (java.text.ParseException ex) {
            ex.printStackTrace();
        }
        textUnidade2.setHorizontalAlignment(javax.swing.JTextField.LEFT);
        textUnidade2.setFocusLostBehavior(javax.swing.JFormattedTextField.COMMIT);
        textUnidade2.setFont(new java.awt.Font("SansSerif", 0, 12));

        javax.swing.GroupLayout tabComplementarLayout = new javax.swing.GroupLayout(tabComplementar);
        tabComplementar.setLayout(tabComplementarLayout);
        tabComplementarLayout.setHorizontalGroup(
            tabComplementarLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(tabComplementarLayout.createSequentialGroup()
                .addContainerGap()
                .addGroup(tabComplementarLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addComponent(lbFatorConversao)
                    .addComponent(lbUnidade2)
                    .addComponent(lbUnidade1))
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                .addGroup(tabComplementarLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addComponent(textFatorConversao, javax.swing.GroupLayout.PREFERRED_SIZE, 90, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(textUnidade2, javax.swing.GroupLayout.PREFERRED_SIZE, 35, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(textUnidade1, javax.swing.GroupLayout.PREFERRED_SIZE, 35, javax.swing.GroupLayout.PREFERRED_SIZE))
                .addGap(42, 42, 42)
                .addComponent(separador, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addGap(18, 18, 18)
                .addComponent(lbUnidade3)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addComponent(textMenorPreco, javax.swing.GroupLayout.PREFERRED_SIZE, 93, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addContainerGap())
        );
        tabComplementarLayout.setVerticalGroup(
            tabComplementarLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(tabComplementarLayout.createSequentialGroup()
                .addContainerGap()
                .addGroup(tabComplementarLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addComponent(lbUnidade1, javax.swing.GroupLayout.Alignment.TRAILING, javax.swing.GroupLayout.PREFERRED_SIZE, 27, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(textUnidade1, javax.swing.GroupLayout.Alignment.TRAILING, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addGroup(tabComplementarLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(lbUnidade2, javax.swing.GroupLayout.PREFERRED_SIZE, 27, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(textUnidade2, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addGroup(tabComplementarLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(lbFatorConversao, javax.swing.GroupLayout.PREFERRED_SIZE, 27, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(textFatorConversao, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
                .addContainerGap(18, Short.MAX_VALUE))
            .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, tabComplementarLayout.createSequentialGroup()
                .addContainerGap(12, Short.MAX_VALUE)
                .addComponent(separador, javax.swing.GroupLayout.PREFERRED_SIZE, 100, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addGap(11, 11, 11))
            .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, tabComplementarLayout.createSequentialGroup()
                .addContainerGap(13, Short.MAX_VALUE)
                .addComponent(textMenorPreco, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addGap(84, 84, 84))
            .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, tabComplementarLayout.createSequentialGroup()
                .addContainerGap(12, Short.MAX_VALUE)
                .addComponent(lbUnidade3, javax.swing.GroupLayout.PREFERRED_SIZE, 27, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addGap(84, 84, 84))
        );

        tabComplementarLayout.linkSize(javax.swing.SwingConstants.VERTICAL, new java.awt.Component[] {textFatorConversao, textUnidade1, textUnidade2});

        painelPrinc.addTab("Dados Complementares", tabComplementar);

        panelBotao.setBorder(javax.swing.BorderFactory.createEtchedBorder(null, java.awt.Color.gray));
        panelBotao.setFont(new java.awt.Font("DejaVu Sans", 0, 12));

        btnBuscar.setFont(new java.awt.Font("SansSerif", 0, 10));
        btnBuscar.setIcon(new javax.swing.ImageIcon(getClass().getResource("/images/find.png"))); // NOI18N
        btnBuscar.setText("Procurar");
        btnBuscar.addMouseListener(new java.awt.event.MouseAdapter() {
            public void mouseClicked(java.awt.event.MouseEvent evt) {
                btnBuscarMouseClicked(evt);
            }
        });

        btnNovo.setFont(new java.awt.Font("SansSerif", 0, 10));
        btnNovo.setIcon(new javax.swing.ImageIcon(getClass().getResource("/images/new.png"))); // NOI18N
        btnNovo.setText("Novo     ");
        btnNovo.addMouseListener(new java.awt.event.MouseAdapter() {
            public void mouseClicked(java.awt.event.MouseEvent evt) {
                btnNovoMouseClicked(evt);
            }
        });

        btnCancel.setFont(new java.awt.Font("SansSerif", 0, 10));
        btnCancel.setIcon(new javax.swing.ImageIcon(getClass().getResource("/images/cancel.png"))); // NOI18N
        btnCancel.setText("Cancelar");
        btnCancel.setMaximumSize(new java.awt.Dimension(92, 34));
        btnCancel.setMinimumSize(new java.awt.Dimension(92, 34));
        btnCancel.setPreferredSize(new java.awt.Dimension(92, 34));
        btnCancel.addMouseListener(new java.awt.event.MouseAdapter() {
            public void mouseClicked(java.awt.event.MouseEvent evt) {
                btnCancelMouseClicked(evt);
            }
        });

        btnExcluir.setFont(new java.awt.Font("SansSerif", 0, 10));
        btnExcluir.setIcon(new javax.swing.ImageIcon(getClass().getResource("/images/delete.png"))); // NOI18N
        btnExcluir.setText("Excluir   ");
        btnExcluir.setMaximumSize(new java.awt.Dimension(92, 34));
        btnExcluir.setMinimumSize(new java.awt.Dimension(92, 34));
        btnExcluir.setPreferredSize(new java.awt.Dimension(92, 34));
        btnExcluir.addMouseListener(new java.awt.event.MouseAdapter() {
            public void mouseClicked(java.awt.event.MouseEvent evt) {
                btnExcluirMouseClicked(evt);
            }
        });

        jPanelNavegacao.setBorder(javax.swing.BorderFactory.createEtchedBorder());

        btnFirst.setFont(new java.awt.Font("SansSerif", 0, 12));
        btnFirst.setIcon(new javax.swing.ImageIcon(getClass().getResource("/images/first.png"))); // NOI18N
        btnFirst.setBorder(javax.swing.BorderFactory.createEmptyBorder(1, 1, 1, 1));
        btnFirst.setContentAreaFilled(false);
        btnFirst.setEnabled(false);
        btnFirst.addMouseListener(new java.awt.event.MouseAdapter() {
            public void mouseClicked(java.awt.event.MouseEvent evt) {
                btnFirstMouseClicked(evt);
            }
        });

        btnPrevious.setFont(new java.awt.Font("SansSerif", 0, 12));
        btnPrevious.setIcon(new javax.swing.ImageIcon(getClass().getResource("/images/previous.png"))); // NOI18N
        btnPrevious.setBorder(javax.swing.BorderFactory.createEmptyBorder(1, 1, 1, 1));
        btnPrevious.setContentAreaFilled(false);
        btnPrevious.setEnabled(false);
        btnPrevious.addMouseListener(new java.awt.event.MouseAdapter() {
            public void mouseClicked(java.awt.event.MouseEvent evt) {
                btnPreviousMouseClicked(evt);
            }
        });

        btnNext.setFont(new java.awt.Font("SansSerif", 0, 12));
        btnNext.setIcon(new javax.swing.ImageIcon(getClass().getResource("/images/next.png"))); // NOI18N
        btnNext.setBorder(javax.swing.BorderFactory.createEmptyBorder(1, 1, 1, 1));
        btnNext.setContentAreaFilled(false);
        btnNext.setEnabled(false);
        btnNext.addMouseListener(new java.awt.event.MouseAdapter() {
            public void mouseClicked(java.awt.event.MouseEvent evt) {
                btnNextMouseClicked(evt);
            }
        });

        btnLast.setFont(new java.awt.Font("SansSerif", 0, 12));
        btnLast.setIcon(new javax.swing.ImageIcon(getClass().getResource("/images/last.png"))); // NOI18N
        btnLast.setBorder(javax.swing.BorderFactory.createEmptyBorder(1, 1, 1, 1));
        btnLast.setContentAreaFilled(false);
        btnLast.setEnabled(false);
        btnLast.addMouseListener(new java.awt.event.MouseAdapter() {
            public void mouseClicked(java.awt.event.MouseEvent evt) {
                btnLastMouseClicked(evt);
            }
        });

        javax.swing.GroupLayout jPanelNavegacaoLayout = new javax.swing.GroupLayout(jPanelNavegacao);
        jPanelNavegacao.setLayout(jPanelNavegacaoLayout);
        jPanelNavegacaoLayout.setHorizontalGroup(
            jPanelNavegacaoLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, jPanelNavegacaoLayout.createSequentialGroup()
                .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                .addComponent(btnFirst)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addComponent(btnPrevious)
                .addGap(10, 10, 10)
                .addComponent(btnNext)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addComponent(btnLast)
                .addContainerGap())
        );
        jPanelNavegacaoLayout.setVerticalGroup(
            jPanelNavegacaoLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addComponent(btnFirst)
            .addComponent(btnPrevious)
            .addComponent(btnNext)
            .addComponent(btnLast)
        );

        javax.swing.GroupLayout panelBotaoLayout = new javax.swing.GroupLayout(panelBotao);
        panelBotao.setLayout(panelBotaoLayout);
        panelBotaoLayout.setHorizontalGroup(
            panelBotaoLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(panelBotaoLayout.createSequentialGroup()
                .addGroup(panelBotaoLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addGroup(panelBotaoLayout.createSequentialGroup()
                        .addGap(200, 200, 200)
                        .addComponent(jPanelNavegacao, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
                    .addGroup(panelBotaoLayout.createSequentialGroup()
                        .addGap(43, 43, 43)
                        .addComponent(btnBuscar, javax.swing.GroupLayout.PREFERRED_SIZE, 110, javax.swing.GroupLayout.PREFERRED_SIZE)
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                        .addComponent(btnNovo, javax.swing.GroupLayout.PREFERRED_SIZE, 110, javax.swing.GroupLayout.PREFERRED_SIZE)
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                        .addComponent(btnCancel, javax.swing.GroupLayout.PREFERRED_SIZE, 110, javax.swing.GroupLayout.PREFERRED_SIZE)
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                        .addComponent(btnExcluir, javax.swing.GroupLayout.PREFERRED_SIZE, 110, javax.swing.GroupLayout.PREFERRED_SIZE)))
                .addContainerGap(37, Short.MAX_VALUE))
        );

        panelBotaoLayout.linkSize(javax.swing.SwingConstants.HORIZONTAL, new java.awt.Component[] {btnBuscar, btnCancel, btnExcluir, btnNovo});

        panelBotaoLayout.setVerticalGroup(
            panelBotaoLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, panelBotaoLayout.createSequentialGroup()
                .addContainerGap(15, Short.MAX_VALUE)
                .addGroup(panelBotaoLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE, false)
                    .addComponent(btnBuscar)
                    .addComponent(btnNovo)
                    .addComponent(btnCancel, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(btnExcluir, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addComponent(jPanelNavegacao, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addGap(6, 6, 6))
        );

        panelBotaoLayout.linkSize(javax.swing.SwingConstants.VERTICAL, new java.awt.Component[] {btnBuscar, btnCancel, btnExcluir, btnNovo});

        javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
        getContentPane().setLayout(layout);
        layout.setHorizontalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addContainerGap()
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING, false)
                    .addComponent(painelPrinc, javax.swing.GroupLayout.Alignment.LEADING, 0, 0, Short.MAX_VALUE)
                    .addComponent(panelBotao, javax.swing.GroupLayout.Alignment.LEADING, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
                .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
        );
        layout.setVerticalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addContainerGap()
                .addComponent(painelPrinc, javax.swing.GroupLayout.PREFERRED_SIZE, 152, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
                .addComponent(panelBotao, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                .addContainerGap())
        );

        java.awt.Dimension screenSize = java.awt.Toolkit.getDefaultToolkit().getScreenSize();
        setBounds((screenSize.width-570)/2, (screenSize.height-305)/2, 570, 305);
    }// </editor-fold>//GEN-END:initComponents

    // Fecha o formulario
    private void formWindowClosed(java.awt.event.WindowEvent evt) {//GEN-FIRST:event_formWindowClosed
        // TODO add your handling code here:
        this.setVisible(false);
        if(this.situacao == K_FORM_CADASTRO){
            this.dispose();
        }
    }//GEN-LAST:event_formWindowClosed

    //<editor-fold defaultstate="collapsed" desc="Eventos CRUD ">
    /**
     * Responsavel por criar um novo objeto unidade ou salva-lo. Dependendo
     * do estado do atual do botao.
     */
    private void btnNovoMouseClicked(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_btnNovoMouseClicked
        try{
            if(btnNovo.isEnabled()){
                // Verifica o estado do botao
                if(this.btnNovo.getText().startsWith("Novo")){
                    clearFields(); // Limpa o formulario
                    StateMachineButton.changeState(getLstButton(1),
                                                       StateMachineButton.NOVO);
                    StateMachineNavigator.changeState(getLstButton(2),
                                                  StateMachineNavigator.PADRAO);

                    // Cria uma novo produto e seta os campos para edicao
                    this.produto = new Produto();
                    enableFields(K_FIELDS_NOVO);
                    Integer cod = (this.produto.recUltCodigo() + 1);
                    this.textCodigo.setText(cod.toString());
                    this.textMenorPreco.setText("0.00");
                }
                else{
                    // Verifica se todos os campos foram mapeados com sucesso
                    if(mapFields()){

                        boolean flag = false;

                        // Verifica se e um novo produto ou se apenas para atulizar
                        if(this.produto.isNew()){
                            flag = this.produto.insert();

                            if(flag){
                                this.lstObj = null;
                                StateMachineButton.changeState(getLstButton(1),
                                                     StateMachineButton.SALVAR);
                            }
                        }
                        else{
                            flag = this.produto.update();

                            if(flag){
                                mudarEstadoNavegacao();
                                StateMachineButton.changeState(getLstButton(1),
                                                   StateMachineButton.CANCELAR);
                            }
                        }

                        // Verifica se foi inserido com sucesso no banco de dados
                        if(flag){
                            this.produto.setIsNew(false);
                            enableFields(K_FIELDS_SALVAR);
                        }
                        else{
                            showMessageError(produto.getErrorMessage());
                        }
                    }
                    else{
                        showMessageError(ErrorMessage.MSG_GERAL_OBRIG);
                    }
                }
            }
        }
        catch(IOException ex){ }
    }//GEN-LAST:event_btnNovoMouseClicked

    /**
     * Busca e recupera uma lista de produtos com os filtros informados
     */
    private void btnBuscarMouseClicked(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_btnBuscarMouseClicked
        try{
            if(btnBuscar.isEnabled()){
                // Verifica o estado do botao
                if(this.btnBuscar.getText().startsWith("Procurar")){
                    clearFields(); // Limpa o formulario

                    StateMachineButton.changeState(getLstButton(1),
                                                   StateMachineButton.PROCURAR);

                    StateMachineNavigator.changeState(getLstButton(2),
                                                  StateMachineNavigator.PADRAO);
                    // Seta os campos como editaveis
                    enableFields(K_FIELDS_BUSCA);
                    this.produto = new Produto();
                    this.grupo   = new Grupo();
                }
                else{
                    // cria uma nova lista de produto
                    this.lstObj = new ArrayList();
                    mapFields();
                    /**
                     * Verifica de que forma a busca sera realizada. A principio
                     * a mesma tera como prioridade o codigo informado, caso nao
                     * tenha sido fornecido um codigo a busca sera realizada
                     * para os demais campos.
                     */
                    if(this.produto.getCodProd() != null ){
                        Produto prod = new Produto();
                        prod = this.produto.refresh(this.produto.getCodProd());

                        // Verifica se foi retornado algum objeto
                        if(prod != null)  lstObj.add(prod);
                    }
                    else{
                        lstObj = this.produto.recLstProdutos(this.produto);
                    }

                    // Verifica se ocorreu algum erro na busca de produtos
                    if(this.produto.getErrorMessage().equals("")){
                        // Verifica se foi recuperado algum objeto
                        if(!lstObj.isEmpty()){
                            StateMachineNavigator.changeState(getLstButton(2),
                             lstObj.size() == 1 ?
                                 StateMachineNavigator.PADRAO :
                                 StateMachineNavigator.PRIMEIRO);

                            StateMachineButton.changeState(getLstButton(1),
                                    StateMachineButton.RECUPERAR);

                            // Apresenta o primeiro produto
                            mostraProduto((Produto)lstObj.get(0));
                        }
                        else{
                            showMessageWarning(ErrorMessage.MSG_PRODUTO_BUSCA);
                        }
                    }
                    else{
                        showMessageError(produto.getErrorMessage());
                    }
                }
            }
        }
        catch(IOException ex){}
    }//GEN-LAST:event_btnBuscarMouseClicked

    /**
     * Cancela uma acao corrente de insercao ou edicao. Responsavel tambem por
     * abrir um registro para edicao.
     */
    private void btnCancelMouseClicked(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_btnCancelMouseClicked
        try{
            if(btnCancel.isEnabled()){
                // Verifica o estado do botao
                if(this.btnCancel.getText().startsWith("Cancelar")){

                    // Realiza a confirmacao da acao pelo usuario
                    if(JOptionPane.showConfirmDialog(this, "Confirma o cancelam"
                         +"ento?", "Confirmation", JOptionPane.OK_CANCEL_OPTION,
                        JOptionPane.QUESTION_MESSAGE) == JOptionPane.OK_OPTION){

                        enableFields(K_FIELDS_SALVAR); // Desabilita os campos

                        if(this.produto.isNew()){
                            clearFields();
                            StateMachineButton.changeState(getLstButton(1),
                                                    StateMachineButton.INICIAL);
                        }
                        else{
                            StateMachineButton.changeState(getLstButton(1),
                                                   StateMachineButton.CANCELAR);
                            mudarEstadoNavegacao();
                        }
                    }
                }
                else{
                    enableFields(K_FIELDS_NOVO);
                    this.produto.setWasUpdated(true);
                    StateMachineButton.changeState(getLstButton(1),
                                                     StateMachineButton.EDITAR);
                    StateMachineNavigator.changeState(getLstButton(2),
                                                  StateMachineNavigator.PADRAO);
                }
            }
        }
        catch(Exception ex){ }
    }//GEN-LAST:event_btnCancelMouseClicked

    /**
     * Exclui um produto da base de dados
     */
    private void btnExcluirMouseClicked(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_btnExcluirMouseClicked
        try{
            if(btnExcluir.isEnabled()){
                // Realiza a confirmacao da acao pelo usuario
                if(JOptionPane.showConfirmDialog(this, "Confirma a exclusão?",
                       "Confirmation", JOptionPane.OK_CANCEL_OPTION,
                       JOptionPane.QUESTION_MESSAGE) == JOptionPane.OK_OPTION){

                    boolean flag = this.produto.delete();
                    if(flag){
                        clearFields();

                        enableFields(K_FIELDS_SALVAR); // Desabilita os campos

                        // Verifica o tamanho da lista
                        if(lstObj != null){
                            // Remove o item da lista corrente
                            lstObj.remove(this.posicao);

                            // Posiciona na base de navegacao
                            mudarEstadoNavegacao();

                            if(lstObj.isEmpty()){
                                StateMachineButton.changeState(getLstButton(1),
                                                    StateMachineButton.EXCLUIR);
                            }
                            else{
                                StateMachineButton.changeState(getLstButton(1),
                                                   StateMachineButton.CANCELAR);
                            }
                        }
                        else{
                            StateMachineButton.changeState(getLstButton(1),
                                                    StateMachineButton.EXCLUIR);
                        }
                    }
                    else{
                        showMessageError(produto.getErrorMessage());
                    }
                }
            }
        }
        catch(Exception ex){ }
    }//GEN-LAST:event_btnExcluirMouseClicked
    //</editor-fold>

    //<editor-fold defaultstate="collapsed" desc="Barra Navegacao">
    /**
     * Move para a primeira posicao da lista de produtos
     */
    private void btnFirstMouseClicked(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_btnFirstMouseClicked
        try{
            // Verifica o tamanho da lista de produtos
            if(!lstObj.isEmpty() && lstObj.size() > 0 && btnFirst.isEnabled()){

                // Posiciona na posicao inicial
                StateMachineNavigator.changeState(getLstButton(2),
                                                StateMachineNavigator.PRIMEIRO);
                this.posicao = 0;
                mostraProduto((Produto)lstObj.get(this.posicao));
            }
        }
        catch(Exception ex){ }
    }//GEN-LAST:event_btnFirstMouseClicked

    /**
     * Move para a ultima posicao da lista de produtos
     */
    private void btnLastMouseClicked(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_btnLastMouseClicked
        try{
            // Verifica o tamanho da lista de produtos
            if(!lstObj.isEmpty() && lstObj.size() > 0 && btnLast.isEnabled()){

                // Posiciona na posicao final
                StateMachineNavigator.changeState(getLstButton(2),
                                                StateMachineNavigator.ULTIMO);
                this.posicao = lstObj.size() - 1;
                mostraProduto((Produto)lstObj.get(this.posicao));
            }
        }
        catch(Exception ex){ }
    }//GEN-LAST:event_btnLastMouseClicked

    /**
     * Posiciona na posicao anterior da lista
     */
    private void btnPreviousMouseClicked(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_btnPreviousMouseClicked
        try{
            // Verifica o tamanho da lista de produtos
            if(!lstObj.isEmpty() && lstObj.size() > 0 && btnPrevious.isEnabled()){

                this.posicao--; // Recebe a proxima posicao

                if(this.posicao >= 1){
                    StateMachineNavigator.changeState(getLstButton(2),
                                          StateMachineNavigator.ANTERIOR_MAIOR);
                }
                else{
                    StateMachineNavigator.changeState(getLstButton(2),
                                          StateMachineNavigator.ANTERIOR_MENOR);
                }

                mostraProduto((Produto)lstObj.get(this.posicao));
            }
        }
        catch(Exception ex){ }
    }//GEN-LAST:event_btnPreviousMouseClicked

    /**
     * Move para a proxima unidade da lista de produtos
     */
    private void btnNextMouseClicked(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_btnNextMouseClicked
        try{
            // Verifica o tamanho da lista de produtos
            if(!lstObj.isEmpty() && lstObj.size() > 0 && btnNext.isEnabled()){

                this.posicao++; // Recebe a proxima posicao

                if(this.posicao >= (lstObj.size() - 1)){
                    StateMachineNavigator.changeState(getLstButton(2),
                                          StateMachineNavigator.PROXIMO_MENOR);
                }
                else{
                    StateMachineNavigator.changeState(getLstButton(2),
                                          StateMachineNavigator.PROXIMO_MAIOR);
                }

                mostraProduto((Produto)lstObj.get(this.posicao));
            }
        }
        catch(Exception ex){ }
    }//GEN-LAST:event_btnNextMouseClicked
    //</editor-fold>

    //<editor-fold defaultstate="collapsed" desc="Busca de Grupos">   
    // Realiza a busca do grupo
    private void btnGrupoMouseClicked(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_btnGrupoMouseClicked
        if(btnGrupo.isEnabled()){
            FormGrupo form = new FormGrupo(FormGrupo.K_FORM_PESQUISA);
            form.setModal(true);
            form.setVisible(true);

            this.grupo = new Grupo();
            this.grupo = form.getGrupo();
            form.dispose();

            this.textGrupo.setText(
                                this.grupo != null ? this.grupo.getNome() : "");
        }
    }//GEN-LAST:event_btnGrupoMouseClicked
    //</editor-fold>

    // Variables declaration - do not modify//GEN-BEGIN:variables
    private javax.swing.JButton btnBuscar;
    private javax.swing.JButton btnCancel;
    private javax.swing.JButton btnExcluir;
    private javax.swing.JButton btnFirst;
    private javax.swing.JButton btnGrupo;
    private javax.swing.JButton btnLast;
    private javax.swing.JButton btnNext;
    private javax.swing.JButton btnNovo;
    private javax.swing.JButton btnPrevious;
    private javax.swing.JPanel jPanelNavegacao;
    private javax.swing.JLabel lbCodigo;
    private javax.swing.JLabel lbDescricao;
    private javax.swing.JLabel lbFatorConversao;
    private javax.swing.JLabel lbGrupo;
    private javax.swing.JLabel lbUnidade1;
    private javax.swing.JLabel lbUnidade2;
    private javax.swing.JLabel lbUnidade3;
    private javax.swing.JTabbedPane painelPrinc;
    private javax.swing.JPanel panelBotao;
    private javax.swing.JSeparator separador;
    private javax.swing.JPanel tabComplementar;
    private javax.swing.JPanel tabDescricao;
    private javax.swing.JTextField textCodigo;
    private javax.swing.JTextField textDescricao;
    private javax.swing.JTextField textFatorConversao;
    private javax.swing.JTextField textGrupo;
    private javax.swing.JTextField textMenorPreco;
    private javax.swing.JFormattedTextField textUnidade1;
    private javax.swing.JFormattedTextField textUnidade2;
    // End of variables declaration//GEN-END:variables

    //<editor-fold defaultstate="collapsed" desc="Methods">
    // Messagem de erro
    private void showMessageError(String msg){
        JOptionPane.showMessageDialog(this, msg, "Produto",
                                                    JOptionPane.ERROR_MESSAGE);
    }

    // Messagem de alerta
    private void showMessageWarning(String msg){
        JOptionPane.showMessageDialog(this, msg, "Produto",
                                                   JOptionPane.WARNING_MESSAGE);
    }

    // Recupera a lista de botoes do formulario
    private ArrayList<JButton> getLstButton(Integer situacao){
        ArrayList<JButton> lstButton = new ArrayList<JButton>();

        if(situacao == 1){
            lstButton.add(this.btnBuscar);
            lstButton.add(this.btnNovo);
            lstButton.add(this.btnCancel);
            lstButton.add(this.btnExcluir);
        }
        else{
            lstButton.add(this.btnFirst);
            lstButton.add(this.btnPrevious);
            lstButton.add(this.btnNext);
            lstButton.add(this.btnLast);
        }

        return lstButton;
    }

    // Limpa os campos do formulario
    private void clearFields(){
        textCodigo.setText("");
        textDescricao.setText("");
        textGrupo.setText("");
        textUnidade1.setText("");
        textUnidade2.setText("");
        textFatorConversao.setText("");
        textMenorPreco.setText("");
    }

    // Controle dos campos para edicao
    private void enableFields(int tipo){

        switch(tipo){
            case FormProduto.K_FIELDS_BUSCA:{
                textCodigo.setEditable(true);
                textDescricao.setEditable(true);
                textUnidade1.setEditable(false);
                textUnidade2.setEditable(false);
                textFatorConversao.setEditable(false);
                btnGrupo.setEnabled(true);
                break;
            }
            case FormProduto.K_FIELDS_SALVAR:{
                textCodigo.setEditable(false);
                textDescricao.setEditable(false);
                textUnidade1.setEditable(false);
                textUnidade2.setEditable(false);
                textFatorConversao.setEditable(false);
                btnGrupo.setEnabled(false);
                break;
            }
            default:{
                textCodigo.setEditable(false);
                textDescricao.setEditable(true);
                textUnidade1.setEditable(true);
                textUnidade2.setEditable(true);
                textFatorConversao.setEditable(true);
                btnGrupo.setEnabled(true);
                break;
            }
        }
    }

    // Transfere os campos para o objeto para persistencia
    private boolean mapFields(){
        boolean map = true;

        try{
            // Uppercase nos campos
            textDescricao.setText(textDescricao.getText().toUpperCase());
            textGrupo.setText(textGrupo.getText().toUpperCase());
            textUnidade1.setText(textUnidade1.getText().toUpperCase().trim());
            textUnidade2.setText(textUnidade2.getText().toUpperCase().trim());

            // Mapeia os campos
            this.produto.setCodProd(this.textCodigo.getText().isEmpty() ?
                            null : Integer.parseInt(this.textCodigo.getText()));
            this.produto.setDescricao(this.textDescricao.getText());
            this.produto.setIdUnidade1(this.textUnidade1.getText().trim());
            this.produto.setIdUnidade2(this.textUnidade2.getText().trim());
            this.produto.setFatorConversao(
                  this.textFatorConversao.getText().isEmpty() ?
                     0 : Double.parseDouble(this.textFatorConversao.getText()));
            this.produto.setMenorPreco(
                  this.textMenorPreco.getText().isEmpty() ?
                     0 : Double.parseDouble(this.textMenorPreco.getText()));

            // Verifica se foi informado algum grupo para cadastro
            map = this.grupo != null ? true : false;
            if(map){
                this.produto.setIdGrupo(this.grupo.getCod_objeto());
            }
        }
        catch(ArithmeticException ex){
            ex.printStackTrace();
            map = false;
        }
        return map;
    }

    // Realiza a apresentacao das unidades recuperadas no formulario
    private void mostraProduto(Produto obj){
        DecimalFormat format = new DecimalFormat("##,##00.00");

        this.produto = obj;
        // Apresenta os campos
        this.textCodigo.setText(obj.getCodProd().toString());
        this.textDescricao.setText(obj.getDescricao());
        this.textFatorConversao.setText(
                format.format(obj.getFatorConversao()).replace(',', '.'));
        this.textMenorPreco.setText(
                format.format(obj.getMenorPreco()).replace(',', '.'));

        // Recuperando as unidades
        Unidade unit = new Unidade();
        unit = unit.refresh(obj.getIdUnidade1());
        this.textUnidade1.setText(unit.getUnidade());
        unit = new Unidade();
        unit = unit.refresh(obj.getIdUnidade2());
        this.textUnidade2.setText(unit.getUnidade());

        // Recuperando o grupo
        this.grupo = new Grupo();
        this.grupo = this.grupo.refresh(obj.getIdGrupo());
        this.textGrupo.setText(this.grupo.getNome());

        // Desabilita os campos para edicao
        enableFields(K_FIELDS_SALVAR);
    }

    // Inicializa o estados de todos os botoes
    private void initializeMyComponents(){
        try{
            StateMachineButton.changeState(getLstButton(1),
                                                  StateMachineButton.INICIAL);
            StateMachineNavigator.changeState(getLstButton(2),
                                                  StateMachineNavigator.PADRAO);
            clearFields();
        }
        catch(IOException ex){}
    }

    // Volta ao estado da navegacao
    private void mudarEstadoNavegacao() throws IOException{

        if(lstObj != null){
            // Verifica se existe a posicao na lista
            boolean exists = this.posicao < this.lstObj.size() ? true : false;

            // Decrementa uma posicao caso a ultima tenha sido removida
            if(!exists) this.posicao--;

            // Verifica se a lista esta vazia
            if(lstObj.isEmpty()){
                clearFields();
                StateMachineNavigator.changeState(getLstButton(2),
                                                  StateMachineNavigator.PADRAO);
            }
            // Verifica se o tamanho da lista e 1
            else{
                mostraProduto((Produto)lstObj.get(this.posicao));

                if(lstObj.size() <= 1){
                    StateMachineNavigator.changeState(getLstButton(2),
                                                  StateMachineNavigator.PADRAO);
                }
                else{
                    // Verifica qual a posicao que se encontra
                    if(this.posicao == 0){
                        StateMachineNavigator.changeState(getLstButton(2),
                                                StateMachineNavigator.PRIMEIRO);
                    }
                    else if(this.posicao == (lstObj.size() - 1)){
                        StateMachineNavigator.changeState(getLstButton(2),
                                                  StateMachineNavigator.ULTIMO);
                    }
                    else{
                        StateMachineNavigator.changeState(getLstButton(2),
                                          StateMachineNavigator.ANTERIOR_MAIOR);
                    }
                }
            }
        }
    }
    //</editor-fold>
}
